/*
 * @Author: zxc
 * @Date: 2020-11-17 13:13:56
 * @LastEditTime: 2020-11-17 13:37:05
 * @LastEditors: zxc
 * @Description:电话号码字母组合
 */

/**
 * @param {string} digits
 * @return {string[]}
 */
// var letterCombinations = function (digits) {
//   let len = digits.length
//   if (len === 0) return []
//   const res = [],
//     map = {
//       2: "abc",
//       3: "def",
//       4: "ghi",
//       5: "jkl",
//       6: "mno",
//       7: "pqrs",
//       8: "tuv",
//       9: "wxyz"
//     }
//   const dfs = (str, idx) => {
//     if (idx > len - 1) {
//       res.push(str)
//       return
//     }
//     const letters = map[digits[idx]]
//     for (const i of letters) {
//       dfs(str + i, idx + 1)
//     }
//   }
//   dfs("", 0)
//   return res
// }

var letterCombinations = function (digits) {
  if (digits.length === 0) {
    return []
  }

  const maps = {
    2: "abc",
    3: "def",
    4: "ghi",
    5: "jkl",
    6: "mno",
    7: "pqrs",
    8: "tuv",
    9: "wxyz"
  }

  let res = []

  if (digits[0] && digits[0] !== 1) {
    res.push(...maps[digits[0]])
  }
  let idx = 1,
    map,
    temp
  while (idx < digits.length) {
    map = maps[digits[idx]]
    if (map) {
      temp = []
      for (let i = 0; i < map.length; i++) {
        for (let j = 0; j < res.length; j++) {
          temp.push(res[j] + map[i])
        }
      }
      res = temp
    } else {
      break
    }
    idx++
  }

  return res
}
